home *** CD-ROM | disk | FTP | other *** search
- Date: Tue, 5 Jan 1999 22:41:44 -0000
- From: D. J. Bernstein <djb@CR.YP.TO>
- To: BUGTRAQ@netspace.org
- Subject: Re: Anonymous Qmail Denial of Service
-
- News flash: There are dozens of denial-of-service attacks on every MTA.
-
- Example: Any Internet user can create a continuing torrent of mail from
- random Internet addresses to wietse@porcupine.org. A few basic methods:
-
- * Send lots of messages to mailinglistmanager@whatever with a return
- path and From line of wietse@porcupine.org. Automated responses
- will go back to wietse@porcupine.org.
-
- * Send lots of messages to legitimateuser@whatever with a return
- path of wietse@porcupine.org. After the legitimateuser mailbox
- fills up, messages will bounce to wietse@porcupine.org, in some
- cases with a delay.
-
- * Relay lots of messages through MTAs with spam-friendly defaults.
- For example, postfix allows relaying from the local network. If a
- postfix system is dialing into an ISP as (say) 18.25.0.221, and
- you're dialing in as (say) 18.25.0.37, then you can queue messages
- on that system for wietse@porcupine.org.
-
- * Subscribe wietse@porcupine.org to an automated mailing list. The
- majordomo 1.* cookie mechanism doesn't stop this attack; it isn't
- cryptographically secure. (Several students in my cryptography
- class two years ago were able to break it, under time pressure, as
- an extra-credit problem on the midterm.)
-
- Thousands of these attacks, producing millions of messages, can be
- carried out in a matter of minutes. The porcupine.org (postfix) SMTP
- server and mail queue will be flooded, making it practically impossible
- for legitimate mail to get through. You can easily remain anonymous, for
- example by abusing the student Internet terminals at MIT.
-
- As another example, here's a denial-of-service attack on postfix:
-
- Connect to the SMTP server at 127.0.0.1 and inject a mail message.
- Repeat ad nauseam.
-
- Most MTAs are able to log the user responsible (by contacting port 113
- and dropping unidentified connections); postfix doesn't even try.
-
-
- Okay, okay, I admit that this isn't news. Here's what I said in the
- qmail documentation, starting with the first release three years ago:
-
- There are lots of interesting remote denial-of-service attacks on any
- mail system. A long-term solution is to insist on prepayment for
- unauthorized resource use. The tricky technical problem is to make
- the prepayment enforcement mechanism cheaper than the expected cost
- of the attacks.
-
- Denial-of-service attacks have always been excluded from the qmail
- security guarantee (http://pobox.com/~djb/qmail/guarantee.html). They
- are present in every MTA, widely documented, and very difficult to fix.
-
-
- On the bright side, mailers are _not_ permitted to discard messages for
- frivolous reasons such as full disks. They have to report the problem to
- the sender, so that the sender can keep the message and try again later.
-
- This isn't just common sense. It's also in RFC 1123, Host Requirements,
- section 5.3.3, Reliable Mail Receipt:
-
- When the receiver-SMTP accepts a piece of mail (by sending a "250 OK"
- message in response to DATA), it is accepting responsibility for
- delivering or relaying the message. It must take this responsibility
- seriously, i.e., it MUST NOT lose the message for frivolous reasons,
- e.g., because the host later crashes or because of a predictable
- resource shortage.
-
- I'm keeping a list of mail clients that do not handle failures properly;
- see http://pobox.com/~djb/docs/maildisasters/queueloss.html. Please let
- me know if you have any additions to the list.
-
-
- This thread began when Venema claimed that it was impossible to track a
- user who fills up qmail's queue by repeatedly running and killing
- qmail-queue.
-
- Venema's claim is false. Every inode created this way requires a new
- qmail-queue process. The process is visible in the standard UNIX process
- list while it is running, and with an X entry in the standard UNIX acct
- mechanism after it has been killed; either way, the user is identified.
- X entries are sometimes created by legitimate users, but not in the
- volume that would be required to fill up the mail queue. Occasional Xs
- are not sufficient to carry out this attack, since each inode is
- automatically removed by qmail-clean after an appropriate delay.
-
- Venema further claims that ``a set-uid posting program cannot guarantee
- user identification.'' That claim is false. The user id is provided by
- the standard UNIX getuid() system call.
-
- See http://pobox.com/~djb/qmail/venema.html for comments on Venema's
- previous denial-of-service accusations.
-
-
- For the record, nothing here should be interpreted as advocating the
- setuid/setgid concept. As I wrote in the qmail documentation in 1995:
-
- A setuid program must operate in a very dangerous environment: a user
- is under complete control of its fds, args, environ, cwd, tty, rlimits,
- timers, signals, and more. Even worse, the list of controlled items
- varies from one vendor's UNIX to the next, so it is very difficult to
- write portable code that cleans up everything.
-
- Of the six most recent sendmail security holes, three worked only
- because the entire sendmail system is setuid.
-
- But my conclusion was merely to be very, very careful: ``Do as little as
- possible in setuid programs.'' The alternatives, such as world-writable
- directories, are horrendous. We'll be stuck with setuid and setgid until
- UNIX develops a simple, portable, reliable, secure IPC mechanism.
-
- ---Dan
-
-